需求: 依照Slug获得Post.
解决方案: API只有getPost(by ID), 我们要创建一个getPostBySlug. (Slug具有唯一性, 可参见表wp_posts,post_name 及有关代码)
Get Post by Slug:
作者: http://www.thiendo.com/blog/wordpress/253-wordpress-get-post-by-slug/
<?php function get_post_by_slug($post_name, $output = OBJECT) { global $wpdb; $post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type='post'", $post_name )); if ( $post ) return get_post($post, $output); return null; } ?>
对于英文的地址来说, 以上代码可以很好的工作, 但如果slug是中文, 就无法工作了, 无法Select到任何东西. 经过Debug, 发现如果slug为中文, 将不会进行任何Select. 如果不使用prepare, 直接使用qury, 则可解决, 解决后的代码:
/** * WP integration: 根据Slug/Post_name返回PostID, 交由后续程序继续处理. * 不直接返回Post的原因是API中getpost()还有很多额外操作, 因此如果需要获得Post, 则可使用: get_post($id); * @param $post_name slug * @param $output 对应post的ID * @return Integer */ function wpi_get_post_id_by_slug($post_name, $output = OBJECT) { global $wpdb; $sql = "SELECT ID FROM $wpdb->posts WHERE post_name = '" . urlencode($post_name) . "' AND post_type='post'"; $postID = $wpdb->get_var($sql); return $postID; }
PHP: 使用定界符<<<处理字符串 <->
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.